package com.weiaibenpao.demo.chislim.tts.util;

import android.content.Context;

import com.weiaibenpao.demo.chislim.tts.NonBlockSynthsizer;

/**
 * Created by ZJL on 2017/10/31.
 */

public class SpeechUtil {
    /**
     * 1.百度语音的集成是在百度官方语音合成Demo中封装好的类的基础上稍作改动，然后再封装一层（即SpeechUtil）实现的 ，封装该层的原因是
     *   百度Demo源码中是不允许SpeechSynthesizer还未释放又继续调用它的getInstance ，所以如果SpeechSynthesizer还未释放但在别处又new NonBlockSynthsizer()这种使用方式会抛出异常
     *   所以干脆封装为单例使用方式
     * 2.实践发现：SpeechSynthesizer的init初始化为异步方式需要一定时间 因此刚new出来不能立马调用speak() 因为此时mSpeechSynthesizer为null
     *   另外即使初始化成功即mSpeechSynthesizer不为null，然后立即调用speak（）是没有声音的，需要等待1300ms以上再调用speak()才能发出声音！！！所以这里在Application onCreate里
     *   调用init（）来提前初始化
     */
    private NonBlockSynthsizer synthsizer;

    public  void init(Context context){
        if(synthsizer == null) {
            synthsizer = new NonBlockSynthsizer(context);
        }
    }

    public static SpeechUtil getInstance(){
        return SpeechUtilHolder.sInstance;
    }

    private static class SpeechUtilHolder{
        private static final SpeechUtil sInstance = new SpeechUtil();
    }

    private SpeechUtil() {
    }

    public void speak(String text){
        if(synthsizer != null){
            synthsizer.speak(text);
        }
    }

    public void pause(){
        if(synthsizer != null){
            synthsizer.pause();
        }
    }

    public void resume(){
        if(synthsizer != null){
            synthsizer.resume();
        }
    }

    public void stop(){
        if(synthsizer != null){
            synthsizer.stop();
        }
    }

    public void release(){
        if(synthsizer != null){
            synthsizer.release();
        }
    }
}
